package com.bd.scm.dao.mapper.door;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bd.scm.domain.dto.door.DoorDefinitionDto;
import com.bd.scm.domain.models.door.DoorDefinition;
import com.bd.scm.domain.models.door.EquipmentInfo;
import com.bd.scm.domain.models.rule.MjRuleReal;

import java.util.List;

public interface DoorDefinitionDao {

    String getDepNo(DoorDefinitionDto doorDefinitionDto);
    /**
     * 获取门数据
     * @return
     */
    IPage<DoorDefinition> getDoorData(Page<DoorDefinition> doorInfo, DoorDefinitionDto doorDefinitionDto);
    /**
     * 获取设备信息
     */
    IPage<EquipmentInfo> getEquipmentInfo(Page<EquipmentInfo> equipmentInfo,DoorDefinitionDto doorDefinitionDto);
    /**
     * 获取门锁接口
     * @param doorDefinitionDto
     * @return
     */
    List<DoorDefinitionDto> getLockInterface(DoorDefinitionDto doorDefinitionDto);
    /**
     * 查询名称是否存在
     * @param doorDefinitionDto
     * @return
     */
    int selectNameIsExisit(DoorDefinitionDto doorDefinitionDto);
    /**
     * 添加门数据
     * @param doorDefinitionDto
     * @return
     */
     int addDoorData(DoorDefinitionDto doorDefinitionDto);
    /**
     * 添加门场所关联表数据
     * @param doorDefinitionDto
     */
     void addDtGateRealByAdd(DoorDefinitionDto doorDefinitionDto);
    /**
     * 添加设备数据进门方式
     * @param doorDefinitionDto
     */
    void addStDoorfxReal1(DoorDefinitionDto doorDefinitionDto);
    /**
     * 添加设备数据出门方式
     * @param doorDefinitionDto
     */
    void addStDoorfxReal2(DoorDefinitionDto doorDefinitionDto);

    /**
     * 添加进门方式的日志
     * @param doorDefinitionDto
     */
    void addWtMjVer1(DoorDefinitionDto doorDefinitionDto);

    /**
     * 添加出门方式的日志
     * @param doorDefinitionDto
     */
    void addWtMjVer2(DoorDefinitionDto doorDefinitionDto);

    /**
     * 添加日志
     * @param doorDefinitionDto
     */
    void addWtMjVer3(DoorDefinitionDto doorDefinitionDto);

    /**
     * 添加完之后的日志
     * @param doorDefinitionDto
     */
     void addLogByAdd(DoorDefinitionDto doorDefinitionDto);
    /**
     * 修改门数据
     * @param doorDefinitionDto
     * @return
     */
     int updateDoorData(DoorDefinitionDto doorDefinitionDto);
    /**
     * 删除原来的设备数据进出门方式
     * @param doorDefinitionDto
     */
    void deleteStDoorfxRealByUpdate(DoorDefinitionDto doorDefinitionDto);

    /**
     * 重新添加设备进门方式数据
     * @param doorDefinitionDto
     */
    void addStDoorfxRealByUpdate1(DoorDefinitionDto doorDefinitionDto);

    /**
     * 重新添加设备进门方式数据
     * @param doorDefinitionDto
     */
    void addStDoorfxRealByUpdate2(DoorDefinitionDto doorDefinitionDto);

    /**
     * 修改设备编号
     * @param doorDefinitionDto
     */
    void updateMjElecmapReal(DoorDefinitionDto doorDefinitionDto);

    /**
     * 修改完之后的日志
     * @param doorDefinitionDto
     */
    void addLogByUpdate(DoorDefinitionDto doorDefinitionDto);


    /**
     * 根据编号查询门名称
     * @param doorDefinitionDto
     * @return
     */
    String getDoorNameByBh(DoorDefinitionDto doorDefinitionDto);
    /**
     * 删除门数据
     */
    int deleteDoorData(DoorDefinitionDto doorDefinitionDto);
    /**
     * 删除关联表
     */
    void deleteStDoorfxReal(DoorDefinitionDto doorDefinitionDto);

    /**
     * 除门锁关联表
     * @param doorDefinitionDto
     */
    void deleteDtGateReal(DoorDefinitionDto doorDefinitionDto);

    /**
     * 删除门规则关联表
     * @param doorDefinitionDto
     */
    void deleteMjUserRuleReal(DoorDefinitionDto doorDefinitionDto);
    void deleteJrealMjCamera(DoorDefinitionDto doorDefinitionDto);

    /**
     * 日志
     * @param doorDefinitionDto
     */
    void addLogByDelete(DoorDefinitionDto doorDefinitionDto);


    /**
     * 获取规则名称
     */
    List<MjRuleReal> getRuleName();
    /**
     * 高级设置
     * @param doorDefinitionDto
     * @return
     */
    int advancedSetting(DoorDefinitionDto doorDefinitionDto);

    /**
     * 高级设置完添加日志
     * @param doorDefinitionDto
     */
    void addLogByAdvanced(DoorDefinitionDto doorDefinitionDto);

    /**
     * 获取选中场所名称
     * @param doorDefinitionDto
     * @return
     */
    String getDepName(DoorDefinitionDto doorDefinitionDto);

    /**
     * 更换场所
     * @param doorDefinitionDto
     * @return
     */
    int updatePlace(DoorDefinitionDto doorDefinitionDto);

    /**
     * 更换场所后添加日志
     * @param doorDefinitionDto
     */
    void addLogByPlace(DoorDefinitionDto doorDefinitionDto);

    /**
     * 获取进门方式
     * @param doorDefinitionDto
     * @return
     */
    int getcType(DoorDefinitionDto doorDefinitionDto);
    /**
     * 获取出门方式
     * @param doorDefinitionDto
     * @return
     */
    int getcType2(DoorDefinitionDto doorDefinitionDto);

    /**
     * 根据场所ID获取场所下门数量.
     *
     * @param placeId
     * @return
     */
    Integer getDoorCountByPlaceId(Long placeId);

}
